package 纯数组;

import com.alibaba.fastjson.JSON;

public class JZ17打印从1到最大的n位数 {

    /**
     * 输入数字 n，按顺序打印出从 1 到最大的 n 位十进制数。
     * 比如输入 3，则打印出 1、2、3 一直到最大的 3 位数 999。
     *
     * 示例 1:
     * 输入: n = 1
     * 输出: [1,2,3,4,5,6,7,8,9]
     *  
     * 说明：
     * 用返回一个整数列表来代替打印
     * n 为正整数
     */

    //一般是要考虑大数的情况,即 0~99999999999999
    public int[] printNumbers(int n) {

        if(n==0){
            return null;
        }

        int length=1;
        for (int i = 0; i < n; i++) {
            length*=10;
        }
        int[] result=new int[length-1];

        for (int i = 0; i < length-1; i++) {
            result[i]=i+1;
        }

        return result;
    }

    private char[] arr={'0','1','2','3','4','5','6','7','8','9'};
    private char[] ans;
    private String[] result;
    private int index=0;
    private int n;

    public String[] printNumbersBigNum(int n) {
        this.n=n;
        ans=new char[n];
        result=new String[(int) Math.pow(10,n)-1];
        dfs(0);
        return result;
    }

    private void dfs(int length) {

        if (length==this.n) {
            String str = String.valueOf(ans);
            str=String.valueOf(Integer.parseInt(str));
            if(str.equals("0")){
                return;
            }
            result[index++]=str;
            return;
        }

        //从 0 开始 递归到底 000001
        for (int i = 0; i < this.arr.length; i++) {
            ans[length]=arr[i];
            dfs(length+1);
        }

    }

    public static void main(String[] args) {
        JZ17打印从1到最大的n位数 jz=new JZ17打印从1到最大的n位数();
        String[] result = jz.printNumbersBigNum(4);
        System.out.println(JSON.toJSONString(result));
    }

}
